﻿Imports System.IO

Class CBitacoraTraspasos

    Private TraspasosServicio As New CTraspasosServicio()
    Private lstBitacora As New List(Of CBitacoraDecalog)
    Private lstPendientes As New List(Of CBitacoraDecalog)

#Region "Carga Página"
    Private Sub CBitacoraTraspasos_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles Me.Loaded
        Try
            InicializarFechaHora()

            RealizaBusqueda()

            Mouse.OverrideCursor = Cursors.Arrow
        Catch ex As Exception
            Mouse.OverrideCursor = Cursors.Arrow

            MessageBox.Show("Error TI500. " & ex.Message, "Carga página bitácora traspasos", MessageBoxButton.OK, MessageBoxImage.Error)
        End Try
    End Sub

#End Region

#Region "Búsqueda"
    Private Sub InicializarFechaHora()
        Me.fechaInicio.Text = Date.Now.ToString("dd/MM/yyyy")
        Me.tiempoInicio.txtHora.Text = "00"
        Me.tiempoInicio.txtMinuto.Text = "00"
        Me.tiempoInicio.txtSegundo.Text = "00"

        Me.fechaFin.Text = Now.ToString("dd/MM/yyyy")
        Me.tiempoFin.txtHora.Text = Date.Now.Hour.ToString("0#")
        Me.tiempoFin.txtMinuto.Text = Date.Now.Minute.ToString("0#")
        Me.tiempoFin.txtSegundo.Text = "00"
    End Sub

    Private Sub RealizaBusqueda()
        Try
            Mouse.OverrideCursor = Cursors.Wait

            Dim intBitacora As Integer = CUtileria.GrabarBitacora("BitacoraTraspasos", "RealizaBúsqueda", "Realiza la búsqueda por rango de fecha de los folios Decalog")

            grdDatosBitacora.ItemsSource = Nothing
            grdDatosBitacora.Items.Refresh()

            lstBitacora = TraspasosServicio.ObtieneBitacoraDECALOG(Me.fechaInicio.Text + " " + Me.tiempoInicio.HoraCompleta, Me.fechaFin.Text + " " + Me.tiempoFin.HoraCompleta)

            grdDatosBitacora.ItemsSource = lstBitacora
            grdDatosBitacora.UpdateLayout()

            If lstBitacora.Count > 0 Then
                Dim qPendientes = From datoPend In lstBitacora Where datoPend.IdEstatus = 0 Select datoPend
                Dim qProcesados = From datoProc In lstBitacora Where datoProc.IdEstatus = 1 Select datoProc
                Dim qError = From datoError In lstBitacora Where datoError.IdEstatus = 2 Select datoError

                lblPendiente.Content = qPendientes.Count
                lblProcesados.Content = qProcesados.Count
                lblErroneos.Content = qError.Count

                If qPendientes.Count > 0 Then
                    btnActRespDec.IsEnabled = True

                    lstPendientes.Clear()

                    For Each q In qPendientes
                        Dim cbdNuevo As New CBitacoraDecalog()
                        cbdNuevo.Id = q.Id
                        cbdNuevo.IdEstatus = q.IdEstatus
                        cbdNuevo.Estatus = q.Estatus
                        cbdNuevo.Archivo = q.Archivo
                        cbdNuevo.Folio = q.Folio
                        cbdNuevo.Usuario = q.Usuario
                        cbdNuevo.Fecha = q.Fecha

                        lstPendientes.Add(cbdNuevo)
                    Next
                Else
                    btnActRespDec.IsEnabled = False
                End If
            Else
                lblPendiente.Content = "0"
                lblProcesados.Content = "0"
                lblErroneos.Content = "0"

                btnActRespDec.IsEnabled = False
            End If

            CUtileria.CompletarRegBitacora(intBitacora)

            Mouse.OverrideCursor = Cursors.Arrow
        Catch ex As Exception
            Dim intErrorBitacora As Integer = CUtileria.GrabarBitacora("BitacoraTraspasos", "RealizaBúsqueda", ex.Message)
            CUtileria.CompletarRegBitacora(intErrorBitacora)

            Mouse.OverrideCursor = Cursors.Arrow

            MessageBox.Show("Error TI500. " & ex.Message, "Búsqueda folios", MessageBoxButton.OK, MessageBoxImage.Error)
        End Try
    End Sub

    Private Sub btnConsultar_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnConsultar.Click
        RealizaBusqueda()
    End Sub

    Private Sub btnLimpiar_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnLimpiar.Click
        InicializarFechaHora()

        grdDatosBitacora.ItemsSource = Nothing
        grdDatosBitacora.Items.Refresh()
        grdDatosBitacora.UpdateLayout()

        lblPendiente.Content = "0"
        lblProcesados.Content = "0"
        lblErroneos.Content = "0"

        btnActRespDec.IsEnabled = False

    End Sub

#End Region

#Region "Actualiza"
    Private Sub btnActRespDec_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnActRespDec.Click
        Try
            Mouse.OverrideCursor = Cursors.Wait

            Dim intBitacoraAct As Integer = CUtileria.GrabarBitacora("BitacoraTraspasos", "ActualizaFolios", "Actualiza el estatus y el folio de Decalog")

            For Each cbdAux As CBitacoraDecalog In lstPendientes
                Dim intVerificacion As Integer = VerificaArchivoDECALOG(cbdAux.Archivo)

                If intVerificacion > 0 Then
                    TraspasosServicio.ActualizaBitacoraDECALOG(cbdAux.Id, intVerificacion, CServiciosMacrosSyBaseDB.IDUSUARIO)
                End If

                If intVerificacion = 1 Then
                    ActualizaFolioDECALOG(cbdAux.Archivo, cbdAux.Id)
                ElseIf intVerificacion = 2 Then
                    ActualizaErrorDECALOG(cbdAux.Archivo, cbdAux.Id)
                ElseIf intVerificacion = 3 Then
                    ActualizaFolioDECALOG(cbdAux.Archivo, cbdAux.Id)
                    ActualizaErrorDECALOG(cbdAux.Archivo, cbdAux.Id)
                End If
            Next

            RealizaBusqueda()

            CUtileria.CompletarRegBitacora(intBitacoraAct)

            Mouse.OverrideCursor = Cursors.Arrow

            MessageBox.Show("Se realizó la búsqueda y actualización de información correctamente", "Actualiza información", MessageBoxButton.OK, MessageBoxImage.Information)
        Catch ex As Exception
            Dim intErrorAct As Integer = CUtileria.GrabarBitacora("BitacoraTraspasos", "ActualizaFolios", ex.Message)
            CUtileria.CompletarRegBitacora(intErrorAct)

            Mouse.OverrideCursor = Cursors.Arrow

            MessageBox.Show("Error TI500. " & ex.Message, "Actualización de información", MessageBoxButton.OK, MessageBoxImage.Error)
        End Try
    End Sub

    Private Function VerificaArchivoDECALOG(ByVal strArchivo As String) As Integer
        Try
            Dim strArchivoTextoError As String = strArchivo + ".tl.err_text"
            Dim strArchivoOK As String = strArchivo + ".tl.ok"
            Dim strArchivoTextoOk As String = strArchivo + ".tl.ok_text"
            Dim strArchivoError As String = strArchivo + ".tl.err"

            strArchivo = strArchivo + ".tl.err_text"

            If File.Exists(strArchivoTextoError) And File.Exists(strArchivoOK) And File.Exists(strArchivoTextoOk) And File.Exists(strArchivoError) Then
                Dim infArchivoError As FileInfo = My.Computer.FileSystem.GetFileInfo(strArchivoError)
                Dim infArchivoTextError As FileInfo = My.Computer.FileSystem.GetFileInfo(strArchivoTextoError)
                Dim infArchivoOK As FileInfo = My.Computer.FileSystem.GetFileInfo(strArchivoOK)
                Dim infArchivoTextOK As FileInfo = My.Computer.FileSystem.GetFileInfo(strArchivoTextoOk)

                If infArchivoTextError.Length = 0 And infArchivoError.Length = 0 And infArchivoOK.Length <> 0 And infArchivoTextOK.Length <> 0 Then
                    Return 1
                ElseIf infArchivoTextError.Length > 0 And infArchivoError.Length > 0 And infArchivoTextOK.Length = 0 And infArchivoOK.Length = 0 Then
                    Return 2
                ElseIf infArchivoTextError.Length > 0 And infArchivoError.Length = 0 And infArchivoTextOK.Length = 0 And infArchivoOK.Length = 0 Then
                    Return 2
                ElseIf infArchivoTextError.Length > 0 And infArchivoError.Length > 0 And infArchivoTextOK.Length > 0 And infArchivoOK.Length > 0 Then
                    Return 3
                Else
                    Return 0
                End If
            End If

            Return 0
        Catch ex As Exception
            Return 0
        End Try
    End Function

    Private Sub ActualizaFolioDECALOG(ByVal strArchivo As String, ByVal intId As Integer)
        Try
            Dim strNombreArchivoFolio As String = strArchivo + ".tl.ok_text", strFolio As String = String.Empty, strAux As String
            Dim inicioIdx As Integer, finIdx As Integer

            If File.Exists(strNombreArchivoFolio) Then
                Dim infArchivoTextoOK As FileInfo = My.Computer.FileSystem.GetFileInfo(strNombreArchivoFolio)

                If infArchivoTextoOK.Length > 0 Then
                    Dim srArchivoOk As New StreamReader(strNombreArchivoFolio)

                    While Not srArchivoOk.EndOfStream
                        strAux = srArchivoOk.ReadLine()

                        inicioIdx = strAux.IndexOf("Ok,")
                        finIdx = strAux.IndexOf("]")

                        If inicioIdx > 0 And finIdx > 0 Then
                            strFolio = strFolio + strAux.Substring(inicioIdx + 3, finIdx - (inicioIdx + 3)).Trim() + ","
                        End If

                    End While

                    srArchivoOk.Close()

                    If strFolio.Length > 0 Then
                        strFolio = strFolio.Substring(0, strFolio.Length - 1)
                    End If

                    TraspasosServicio.ActualizaFolioDECALOG(intId, strFolio, CServiciosMacrosSyBaseDB.IDUSUARIO)
                Else
                    TraspasosServicio.ActualizaFolioDECALOG(intId, "Archivo sin información", CServiciosMacrosSyBaseDB.IDUSUARIO)
                End If
            End If
        Catch ex As Exception
            Dim intErrorFolioDECALOG As Integer = CUtileria.GrabarBitacora("BitacoraTraspasos", "ActualizarFolioDecalog", "Ocurrió un error al obtener el folio de Decalog para el archivo " & strArchivo & ".Error: " & ex.Message)
            CUtileria.CompletarRegBitacora(intErrorFolioDECALOG)

            Mouse.OverrideCursor = Cursors.Arrow

            MessageBox.Show("Error TI500. " & ex.Message, "Actualizar Folio Decalog", MessageBoxButton.OK, MessageBoxImage.Error)
        End Try
    End Sub

    Private Sub ActualizaErrorDECALOG(ByVal strArchivo As String, ByVal intId As Integer)
        Try
            Dim strNombreArchivoFolio As String = strArchivo + ".tl.err_text", strMensaje As String = String.Empty

            If File.Exists(strNombreArchivoFolio) Then
                Dim infArchivoTextoOK As FileInfo = My.Computer.FileSystem.GetFileInfo(strNombreArchivoFolio)

                If infArchivoTextoOK.Length > 0 Then
                    strMensaje = File.ReadAllText(strNombreArchivoFolio)

                    TraspasosServicio.ActualizaMensajeErrorDECALOG(intId, strMensaje, CServiciosMacrosSyBaseDB.IDUSUARIO)
                Else
                    TraspasosServicio.ActualizaMensajeErrorDECALOG(intId, "Archivo sin información", CServiciosMacrosSyBaseDB.IDUSUARIO)
                End If
            End If
        Catch ex As Exception
            Dim intErrorDECALOG As Integer = CUtileria.GrabarBitacora("BitácoraTraspasos", "ActualizarErrorDecalog", "Ocurrió un error al obtener el mensaje de Decalog para el archivo " & strArchivo & ".Error: " & ex.Message)
            CUtileria.CompletarRegBitacora(intErrorDECALOG)

            Mouse.OverrideCursor = Cursors.Arrow

            MessageBox.Show("Error TI500. " & ex.Message, "Actualizar Error Decalog", MessageBoxButton.OK, MessageBoxImage.Error)
        End Try
    End Sub
#End Region

End Class
